MIT 6.5840 Lab 2
Raft
- 官网: Raft Consensus Algorithm
- 动画演示: Raft
- 实验指导: Students' Guide to Raft :: Jon Gjengset
- 中文翻译: 【译】Raft 学生指南(一) - 知乎
- 论文: https://pdos.csail.mit.edu/6.824/papers/raft-extended.pdf
- Raft 作者博士论文的中文翻译: GitHub - OneSizeFitsQuorum/raft-thesis-zh_cn: Raft 博士论文的中文翻译
- Raft 算法与对应代码框架介绍 - 知乎
- Debugging by Pretty Printing
- https://pdos.csail.mit.edu/6.824/labs/raft-locking.txt
- https://pdos.csail.mit.edu/6.824/labs/raft-structure.txt
Lab Blogs
- 6.824 Lab2: Raft - 知乎
- MIT6.824 lab2 笔记 - 知乎
- MIT 6.824 分布式系统 | Lab 2A:Raft 选举 - 知乎
- MIT 6.824 Lab2A 笔记
- C++ LAB2A.md
- CSDIY lab2.md
- GitHub - niebayes/MIT-6.5840: My solution for MIT 6.5840 (aka. MIT 6.824). No fail in 30,000 tests.
- Journey to MIT 6.824 — Lab 2A Raft Leader Election | by Qingping Meng | CodeX | Medium
- MIT 6.824 Lab 2: Raft 实验 | Ray's Blog
- Site Unreachable
Notes
1. 关于 Go 中的单元测试
Go 语言中形如 *_test.go
的文件会被认为是测试文件,使用 VSCode 调试测试文件(当然,并发情况下单步调试不再有效):
{
"debugAdapter": "dlv-dap",
"name": "raft2A",
"type": "go",
"request": "launch",
"mode": "test",
"cwd": "${workspaceFolder}/src/raft",
"program": "${workspaceFolder}/src/raft/test_test.go",
"buildFlags": "-race"
}
而在 Lab 2A,要求我们使用 go test -run 2A
以运行测试,仅有包含 2A
字符的测试会被运行。参考 go - How to run test cases in a specified file? - Stack Overflow ,其详细说明可以通过 go help testflag
查看。
2. sync.Once
的使用
在 make_config()
函数中出现,用于仅初始化随机种子一次。
3. Go 语法高亮问题
在 VSCode 中,默认的 Go 语法高亮不能很好地显示自定义类型,参考 [vscode-go] docs: mention advanced semantic token options 的提示修改配置文件。
因为我的实现是在阅读了开源库 hashicorp/raft 的部分源码后进行的